package com.ds.common.org.expression.org;

import java.util.List;
import java.util.Stack;

import com.ds.common.expression.ParseException;
import com.ds.common.expression.function.Function;
import com.ds.org.Org;
import com.ds.org.OrgManager;
import com.ds.org.Role;
import com.ds.server.OrgManagerFactory;

/**
 * 取得指定某个组织机构级别下的所有人员
 * <p>Title: JDSORG组织机构中间件</p>
 * <p>Description: </p>
 * <p>Copyright: jds Copyright (c) 2003-2008</p>
 * <p>Company: www.justdos.net</p>
 * @author wenzhangli
 * @version 2.0
 */
public class GetOrgByOrgLevel extends Function {
	public GetOrgByOrgLevel() {
		numberOfParameters = 1;
	}

	public void run(Stack stack) throws ParseException
	{
		checkStack(stack); // check the stack
		Object param2 = stack.pop(); 
		stack.push(perform(param2));
	}

	protected Org[] perform(Object param1) throws ParseException {
		if (param1 == null) {
			return new Org[0];
		}
		//组织机构级别的名称
		if (param1 instanceof String) {
			String levelName = (String)param1;
			OrgManager orgManager = OrgManagerFactory.getOrgManager();
			List<Org> result= orgManager.getOrgsByOrgLevelName(levelName);

			return (Org[]) result.toArray(new Org[result.size()]);
		}
		//组织机构级别的对象
		if (param1 instanceof Role) {
			String id = ((Role)param1).getRoleId();
			OrgManager orgManager = OrgManagerFactory.getOrgManager();

			List<Org> result= orgManager.getOrgsByOrgLevelID(id);

			return (Org[]) result.toArray(new Org[result.size()]);
		}
 		throw new ParseException("Invalid parameter type in:" + this.getClass().getName() + ", param1 is " + param1.getClass().getName());
 	}
}
